package com.xiaotu.common.util;

import com.xiaotu.spider.APageProcessor;

import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.Pipeline;
import us.codecraft.webmagic.scheduler.QueueScheduler;
import us.codecraft.webmagic.scheduler.component.HashSetDuplicateRemover;

public class SpiderUtil
{
	
	/**
	 * 爬取普通页面的url（单线程）
	 * @param pageProcessor
	 */
	public static void spiderRun(APageProcessor pageProcessor,
			Pipeline pipeline)
	{
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 返回爬取結果進行處理
		spider.addPipeline(pipeline);
		// 並且以阻塞方式運行
		spider.run();
	}
	
	public static void spiderRun(APageProcessor pageProcessor)
	{
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 並且以阻塞方式運行
		spider.run();
	}
	
	/**
	 * 爬取普通页面的url（单线程）
	 * @param pageProcessor
	 */
	public static void spiderRun(APageProcessor pageProcessor,
			Pipeline pipeline, String... urls)
	{
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 返回爬取結果進行處理
		spider.addPipeline(pipeline);
		spider.addUrl(urls);
		// 並且以阻塞方式運行
		spider.run();
	}
	
	/**
	 * 爬取普通页面的url（单线程）但使用代理访问
	 * @param pageProcessor
	 */
	public static void spiderRunProxy(APageProcessor pageProcessor,
			Pipeline pipeline)
	{
		// 开启代理
		// pageProcessor.useProxy();
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 返回爬取結果進行處理
		spider.addPipeline(pipeline);
		// 並且以阻塞方式運行
		spider.run();
	}
	
	/**
	 * 爬取普通页面的url（多线程）
	 * @param pageProcessor
	 * @param threadCount 线程数
	 */
	public static void spiderStart(APageProcessor pageProcessor,
			Pipeline pipeline, int threadCount)
	{
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 返回爬取結果進行處理
		spider.addPipeline(pipeline);
		
		// 起5個線程執行，並且以阻塞方式運行
		spider.thread(threadCount).start();
	}
	
	/**
	 * 爬取普通页面的url（多线程）,添加多条url
	 * @param pageProcessor
	 * @param threadCount 线程数
	 */
	public static void spiderStart(APageProcessor pageProcessor,
			Pipeline pipeline, int threadCount, String... urls)
	{
		Spider spider = Spider.create(pageProcessor);
		// 過濾重複鏈接
		spider.setScheduler(new QueueScheduler()
				.setDuplicateRemover(new HashSetDuplicateRemover()));
		// 返回爬取結果進行處理
		spider.addPipeline(pipeline);
		spider.addUrl(urls);
		// 起5個線程執行，並且以阻塞方式運行
		spider.thread(threadCount).start();
	}
	
}